/*
 * @(#)XfuzzyIntegerDataType.java        1.0 2009/03/25
 *
 * This file is part of Xfuzzy 3.0, a design environment for fuzzy logic
 * based systems.
 *
 * (c) 2000 IMSE-CNM. The authors may be contacted by the email address:
 *                    xfuzzy-team@imse.cnm.es
 *
 * Xfuzzy is free software; you can redistribute it and/or modify it
 * under the terms of the GNU General Public License as published by
 * the Free Software Foundation.
 *
 * Xfuzzy is distributed in the hope that it will be useful, but WITHOUT
 * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
 * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
 * for more details.
 */

package xfuzzy.xfds;

import xfuzzy.lang.Universe;


/**
 * Clase que describe un tipo de dato entero
 * 
 * @author Francisco Jos� Moreno Velo
 *
 */
public class XfdsIntegerDataType extends XfdsDataType {

	//----------------------------------------------------------------------------//
	//                            MIEMBROS PRIVADOS                               //
	//----------------------------------------------------------------------------//

	/**
	 * Valor m�nimo del tipo de datos (0 por defecto) 
	 */
	private int min;
	
	/**
	 * Valor m�ximo del tipo de datos (Integer.MAX_VALUE por defecto)
	 */
	private int max;
	
	/**
	 * Marcador que indica si se ha calculado el rango
	 */
	private boolean ranged;
	
	//----------------------------------------------------------------------------//
	//                                CONSTRUCTOR                                 //
	//----------------------------------------------------------------------------//

	/**
	 * Constructor
	 */
	public XfdsIntegerDataType() {
		this.min = 0;
		this.max = Integer.MAX_VALUE;
		this.ranged = false;
	}
	
	/**
	 * Constructor con rango
	 * @param min
	 * @param max
	 */
	public XfdsIntegerDataType(int min, int max) {
		this.min = min;
		this.max = max;
		this.ranged = true;
	}
	
	/**
	 * Constructor con rango expresado como Strings
	 * @param range
	 */
	public XfdsIntegerDataType(String[] range) {
		if(range == null || range.length != 2) {
			this.min = 0;
			this.max = Integer.MAX_VALUE;
			this.ranged = false;
		} else {
			this.min = Integer.parseInt(range[0]);
			this.max = Integer.parseInt(range[1]);
			this.ranged = true;
		}
	}

	//----------------------------------------------------------------------------//
	//                             M�TODOS P�BLICOS                               //
	//----------------------------------------------------------------------------//

	/**
	 * Obtiene el valor m�nimo del rango del tipo de dato
	 */
	public int getMin() {
		return this.min;
	}
	
	/**
	 * Asigna el valor m�nimo del rango del tipo de dato
	 * @param min
	 */
	public void setMin(int min) {
		this.min = min;
	}

	/**
	 * Obtiene el valor m�ximo del rango del tipo de dato
	 */
	public int getMax() {
		return this.max;
	}
	
	/**
	 * Asigna el valor m�ximo del rango del tipo de dato
	 * @param min
	 */
	public void setMax(int max) {
		this.max = max;
	}

	/**
	 * Obtiene el valor asociado a la cadena reconocida
	 */
	public double getValue(String v) {
		return (double) Integer.parseInt(v);
	}

	/**
	 * Obtiene el valor del rango del tipo
	 */
	public double getRange() {
		return (double) (max-min);
	}
	
	/**
	 * Obtiene el universo de discurso del atributo
	 * @return
	 */
	public Universe getUniverse() {
		try { 
			return new Universe(min,max);
		} catch(Exception ex) {
			return new Universe();
		}
	}

	/**
	 * Asigna el valor m�ximo y m�nimo del rango del tipo de dato
	 * @param min
	 * @param max
	 */
	public void setRange(double min, double max) {
		this.min = (int) min;
		this.max = (int) max;
		this.ranged = true;
	}

	/**
	 * Obtiene el marcador de rango asignado
	 * @return
	 */
	public boolean isRanged() {
		return ranged;
	}

	//----------------------------------------------------------------------------//
	//                             M�TODOS PRIVADOS                               //
	//----------------------------------------------------------------------------//


}
